home *** CD-ROM | disk | FTP | other *** search
- /*
- QTMovieGE.c
-
- QuickTime movie as a graphic element
-
- Copyright 1995 by Al Evans. All rights reserved.
-
- 5/10/95
-
- Machack 6/22/95
-
- */
-
- #include "QTMovieGE.h"
- #include "Rects.h"
-
- pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld);
- pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element);
-
- GrafElPtr NewQTMovieGE(GEWorldPtr world, OSType id, short plane,
- Movie movie, short xPos, short yPos)
-
- {
- GrafElPtr element;
- Rect movieRect;
-
- element = NewGrafElement(world, id, plane, sizeof(QTMovieGE), NoLoader, 0, 0);
- if (element) {
- element->copyMode = srcCopy;
- element->flags = geShown;
- element->renderIt = RenderQTMovieGE;
- element->drawIt = nil;
- element->changeIntrvl = 0;
- element->lastChangeTime = CurrentGETime(world);
-
- // Set up movie
- SetMovieGWorld(movie, (CGrafPtr) world->stageGWorld, nil);
- GetMovieBox(movie, &movieRect);
- RectOffset(&movieRect, -movieRect.left, -movieRect.top);
- movieRect.right = movieRect.left + ScaleToWorld(world, RectWidth(&movieRect));
- movieRect.bottom = movieRect.top + ScaleToWorld(world, RectHeight(&movieRect));
- element->graphRect = movieRect;
- element->animationRect = movieRect;
- RectOffset(&element->animationRect, ScaleToWorld(world, xPos),
- ScaleToWorld(world, yPos));
- SetMovieBox(movie, &element->animationRect);
- GoToBeginningOfMovie(movie);
-
- ChangedRect(world, &element->animationRect);
- ((QTMovieGEPtr) element)->geMovie = movie;
- ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
- SetCleanupProc(world, id, CleanupMovieGE);
- }
- return element;
-
- }
-
- pascal void RenderQTMovieGE(GrafElPtr movieElement, GWorldPtr destGWorld)
- {
- /*
- Since QuickTime doesn't pay attention to clipRgn, manipulate the visRgn
- directly. This is MUCH faster than using SetMovieDisplayClipRgn()
- */
- RgnHandle saveRgn = destGWorld->visRgn;
- RgnHandle drawRgn = NewRgn();
-
- RectRgn(drawRgn, &movieElement->drawRect);
- destGWorld->visRgn = drawRgn;
- UpdateMovie(((QTMovieGEPtr) movieElement)->geMovie);
- MoviesTask(((QTMovieGEPtr) movieElement)->geMovie, 1);
- destGWorld->visRgn = saveRgn;
- DisposeRgn(drawRgn);
- }
-
- pascal void CleanupMovieGE(GEWorldPtr world, GrafElPtr element)
- {
- DisposeMovie(((QTMovieGEPtr) element)->geMovie);
- }
-
- pascal void GEMovieAutoChange(GEWorldPtr world, GrafElPtr element)
- {
- // If element has been moved, move the QT movie to new position
- // (comparing points as longs!)
- if (*((long *) &((QTMovieGEPtr) element)->tlSave) != *((long *) &element->animationRect))
- {
- SetMovieBox(((QTMovieGEPtr) element)->geMovie, &element->animationRect);
- ((QTMovieGEPtr) element)->tlSave = *((Point *) &element->animationRect);
- }
- ChangedRect(world, &element->animationRect);
- }
-
- Movie GetGEMovie(GEWorldPtr world, OSType movieGEID)
- {
- QTMovieGEPtr movieElement = (QTMovieGEPtr) FindElementByID(world, movieGEID);
-
- if (movieElement == nil)
- return nil;
- else
- return movieElement->geMovie;
- }
-
-